<!doctype html>
<html class="theme-next use-motion theme-next-mist">
<head>
  
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>

<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />

  <meta name="google-site-verification" content="K8DCBviaoTBKVs28YBB7IBIbospQ9RVlgSh81RYMUhY" />


  <meta name="baidu-site-verification" content="tXr3ZTm3Hx" />



  <link rel="stylesheet" type="text/css" href="/vendors/fancybox/source/jquery.fancybox.css?v=2.1.5"/>


<link rel="stylesheet" type="text/css" href="/css/main.css?v=0.4.5.1"/>

  <meta name="description" content="xgfe's blog. 鲜果前端的技术博客，鲜果前端研发部官方博客。前端基础技术研究：html, html5, javascript, css, css3；前端框架研究：angularJs, react, react native." />


  <meta name="keywords" content="git," />


  <link rel="alternate" target="_blank" href="/atom.xml" title="xgfe" type="application/atom+xml" />


  <link rel="shorticon icon" type="image/x-icon" href="http://p0.meituan.net/xgfe/2db359f56ce13be30dedef160e0e57ce16958.ico?v=0.4.5.1" />

<meta name="keywords" content="git">
<meta property="og:type" content="article">
<meta property="og:title" content="Git常用命令和基础简介">
<meta property="og:url" content="http://xgfe.github.io/2017/01/22/penglu/git-01/index.html">
<meta property="og:site_name" content="xgfe">
<meta property="og:image" content="http://p1.meituan.net/sjstpic/c366d874c3ae58085a175a4408c9766b98467.jpeg">
<meta property="og:image" content="http://p0.meituan.net/sjstpic/c231ae8dc3a9c15e357f11a0ffd23a7930950.jpeg">
<meta property="og:image" content="http://p1.meituan.net/sjstpic/4c0afe43b48bbe76da6604531055886844270.jpeg">
<meta property="og:image" content="http://p0.meituan.net/sjstpic/58a7145ef372c86d70ab44a264df120635773.jpeg">
<meta property="og:image" content="http://p0.meituan.net/sjstpic/8b7b135f720ea35b7413dc76d975554d90563.jpeg">
<meta property="og:updated_time" content="2017-04-12T08:03:36.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Git常用命令和基础简介">
<meta name="twitter:image" content="http://p1.meituan.net/sjstpic/c366d874c3ae58085a175a4408c9766b98467.jpeg">


<script type="text/javascript" id="hexo.configuration">
  var CONFIG = {
    scheme: 'Mist',
    sidebar: 'post'
  };
</script>

  <title> Git常用命令和基础简介 | xgfe </title>
</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">
  <div style="position: fixed; top: -9999px; left: -9999px;">
    <img src="http://p0.meituan.net/xgfe/082a9624ba5ae8602150a2d43968463e49348.png" alt="xgfe"/>
  </div>
  <!--[if lte IE 8]>
  <div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;margin:0 auto;'>
    <a href="http://windows.microsoft.com/en-US/internet-explorer/products/ie/home?ocid=ie6_countdown_bannercode">
      <img src="http://7u2nvr.com1.z0.glb.clouddn.com/picouterie.jpg" border="0" height="42" width="820"
           alt="You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today or use other browser ,like chrome firefox safari."
           style='margin-left:auto;margin-right:auto;display: block;'/>
    </a>
  </div>
<![endif]-->
  

  <script type="text/javascript">
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "//hm.baidu.com/hm.js?3601d4483819a5ab6ddabb0b6422a328";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
  </script>



  <div class="container one-column page-post-detail">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><h1 class="site-meta">
  <span class="logo-line-before"><i></i></span>
  <a href="/" class="brand" rel="start">
      <span class="logo">
        <i class="icon-next-logo"></i>
      </span>
      <span class="site-title">xgfe</span>
  </a>
  <span class="logo-line-after"><i></i></span>
</h1>

<div class="site-nav-toggle">
  <button>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
  </button>
</div>

<nav class="site-nav">
  
  

  
    <ul id="menu" class="menu menu-left">
      
        
        <li class="menu-item menu-item-home">
          <a href="/" rel="section">
            <i class="menu-item-icon icon-next-home"></i> <br />
            首页
          </a>
        </li>
      
        
        <li class="menu-item menu-item-archives">
          <a href="/archives" rel="section">
            <i class="menu-item-icon icon-next-archives"></i> <br />
            归档
          </a>
        </li>
      
        
        <li class="menu-item menu-item-tags">
          <a href="/tags" rel="section">
            <i class="menu-item-icon icon-next-tags"></i> <br />
            标签
          </a>
        </li>
      
        
        <li class="menu-item menu-item-join">
          <a href="/join" rel="section">
            <i class="menu-item-icon icon-next-join"></i> <br />
            加入我们
          </a>
        </li>
      
      <!-- slide-links added by felix -->
      <li class="menu-item menu-item-slides" style="opacity: 1; transform: translateY(0px);">
        <a href="http://xgfe.github.io/Basics/" target="_blank" rel="section">
          <i class="menu-item-icon icon-next-slides"></i> <br>
          Basics
        </a>
      </li>
      <li class="menu-item menu-item-slides" style="opacity: 1; transform: translateY(0px);">
        <a href="https://slides.com/xgfe" target="_blank" rel="section">
          <i class="menu-item-icon icon-next-slides"></i> <br>
          Slides
        </a>
      </li>

      
      
    </ul>
  

  
    <div class="site-search">
      

    </div>
  

    <div class="site-search">
      <form class="site-search-form" id="gg-form" action="https://www.google.com/webhp" >
        <input type="text" name="q" id="gg-search-input" class="menu-search-input">
      </form>
    </div>
</nav>
 </div>
    </header>

    <main id="main" class="main">
      <div class="main-inner">
        <div id="content" class="content"> 

  <div id="posts" class="posts-expand">
    

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
    <header class="post-header">

      
      
        <h1 class="post-title" itemprop="name headline">
          
          
            
              Git常用命令和基础简介
            
          
        </h1>
      

      <div class="post-meta">
        <span class="post-time">
          发表于
          <time itemprop="dateCreated" datetime="2017-01-22T11:00:00+08:00" content="2017-01-22">
            2017-01-22
          </time>
        </span>

        
          <span class="post-category" >
            &nbsp; | &nbsp; 作者
            
              <span itemprop="about" itemscope itemtype="https://schema.org/Thing">
                <a href="/categories/penglu/" itemprop="url" rel="index">
                  <span itemprop="name">penglu</span>
                </a>
              </span>

              
              

            
          </span>
        

        
          
        

        <!-- tags 挪动位置 -->
        
          <span class="post-tags">
            &nbsp; | &nbsp;
            
              <a href="/tags/git/" rel="tag"><i class="icon-next-tags"></i>git</a>
            
          </span>
        
      </div>
    </header>

    <div class="post-body">

      
      

      
        <span itemprop="articleBody"><p><iframe src="//slides.com/xgfe/deck-a989e27f-2a33-4351-a7b9-cb675607152b/embed" width="576" height="420" scrolling="no" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen></iframe><br><a id="more"></a></p>
<h2 id="初识Git"><a href="#初识Git" class="headerlink" title="初识Git"></a>初识Git</h2><h3 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h3><p><img src="http://p1.meituan.net/sjstpic/c366d874c3ae58085a175a4408c9766b98467.jpeg"></p>
<ol>
<li>处理修改文件，保留修改文件的方式:<ul>
<li>复制整个项目目录的方式来保存不同的版本</li>
<li>改名加上备份时间以示区别</li>
</ul>
</li>
<li>优劣势分析<ul>
<li>好处：简单</li>
<li>坏处：有时候会混淆所在的工作目录，一旦弄错文件丢了数据就没法撤销恢复</li>
</ul>
</li>
</ol>
<h3 id="版本控制"><a href="#版本控制" class="headerlink" title="版本控制"></a>版本控制</h3><ol>
<li>定义：一种纪录一个或若干文件内容变化，以便将来查阅特定版本修订情况的系统。</li>
<li>作用：可以将文件回溯到之前的状态，甚至将整个项目都回退到过去某个时间点的状态，可以比较文件的变化细节，查出谁修改了哪些地方。</li>
<li><p>发展阶段：本地版本控制—&gt;集中化版本控制—&gt;分布式版本控制</p>
<ul>
<li>本地版本控制<br>  <br><img src="http://p0.meituan.net/sjstpic/c231ae8dc3a9c15e357f11a0ffd23a7930950.jpeg"> <ul>
<li>本地版本控制系统，大多都是采用某种简单的数据库来记录文件的历次更新差异（rsc）它的工作原理基本上就是保存并管理文件补丁（patch）。文件补丁是一种特定格式的文本文件，记录着对应文件修订前后的内容变化。所以，根据每次修订后的补丁，rcs 可以通过不断打补丁，计算出各个版本的文件内容</li>
</ul>
</li>
<li><p>集中化版本控制<br><img src="http://p1.meituan.net/sjstpic/4c0afe43b48bbe76da6604531055886844270.jpeg"></p>
<ul>
<li>如何让在不同系统上的开发者协同工作？集中化的版本控制系统（ Centralized Version Control Systems，简称 CVCS .有一个单一的集中管理的服务器，保存所有文件的修订版本，而协同工作的人们都通过客户端连到这台服务器，取出最新的文件或者提交更新.这么做好处，特别是相较于老式的本地 SVN来说。每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限，并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。缺点是中央服务器的单点故障。如果宕机一小时，那么在这一小时内，谁都无法提交更新，也就无法协同工作。要是中央服务器的磁盘发生故障，碰巧没做备份，或者备份不够及时，就会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录，而被客户端偶然提取出来的保存在本地的某些快照数据就成了恢复数据的希望。</li>
</ul>
</li>
<li><p>分布式版本控制<br><img src="http://p0.meituan.net/sjstpic/58a7145ef372c86d70ab44a264df120635773.jpeg"></p>
<ul>
<li>分布式版本控制系统（ Distributed Version Control System，简称 DVCS ），客户端并不只提取最新版本的文件快照，而是把代码仓库完整地镜像下来。这么一来，任何一处协同工作用的服务器发生故障，事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作，实际上都是一次对代码仓库的完整备份（GIT）</li>
</ul>
</li>
</ul>
</li>
</ol>
<h3 id="认识Git"><a href="#认识Git" class="headerlink" title="认识Git"></a>认识Git</h3><ol>
<li>直接记录快照,而非差异比较<ul>
<li>其它版本控制系统，以稳健变更列表的方式存储信息；Git把数据看作是对小型文件系统的一组快照。如果文件没有修改，Git不再重新存储该文件，而只是保留一个链接指向之前存储的文件</li>
</ul>
</li>
<li>近乎所有操作都是本地执行<ul>
<li>大多数操作都只需要访问本地文件和资源，一般不需要来自网络上其它计算机的信息</li>
</ul>
</li>
<li>Git保证完整性<ul>
<li>Git中所有数据在存储前都计算校验和，然后以校验和引用。因此，不可能在Git不知情时更改任何文件内容或目录内容。[Git用以计算校验和的机制叫做SHA-1散列(hash, 哈希)，一个由40个十六进制字符(0-9和a-f)组成字符串]</li>
</ul>
</li>
<li>Git一般只添加数据<ul>
<li>未提交更新时有可能丢失或弄乱修改的内容，但是一旦提交快照到Git，就很难丢失数据</li>
</ul>
</li>
<li>三种状态(committed、modified以及staged)、三个工作区域（Git仓库、工作目录以及暂存区域）<ul>
<li>committed(已提交)，modified(已修改)，staged(已暂存)；</li>
</ul>
</li>
<li>命令行<ul>
<li>可以使用原生命令行模式，也可使用GUI模式</li>
</ul>
</li>
</ol>
<h4 id="安装Git"><a href="#安装Git" class="headerlink" title="安装Git"></a>安装Git</h4><ol>
<li>安装Git</li>
<li>初次运行前Git的配置<ul>
<li>git config</li>
<li>/etc/gitconfig文件</li>
<li>~/.gitconfig或者~/.config/git/config文件config文件</li>
</ul>
</li>
<li>Git配置常用命令<ul>
<li>git config –global user.name  “XXX”</li>
<li>git config –global user.email  “YYY”</li>
<li>git config –list</li>
</ul>
</li>
</ol>
<h2 id="Git基础简介"><a href="#Git基础简介" class="headerlink" title="Git基础简介"></a>Git基础简介</h2><h3 id="三种状态"><a href="#三种状态" class="headerlink" title="三种状态"></a>三种状态</h3><ol>
<li>committed(已提交)<ul>
<li>数据已安全保存在本地数据库中</li>
</ul>
</li>
<li>modified(已修改)<ul>
<li>修改文件，但是还没保存到数据库中</li>
</ul>
</li>
<li>staged(已暂存)<ul>
<li>表示对一个已修改文件的当前版本做了标记，使之包含在下一次提交的快照中</li>
</ul>
</li>
</ol>
<h3 id="三个工作区"><a href="#三个工作区" class="headerlink" title="三个工作区"></a>三个工作区</h3><ol>
<li>Git仓库目录<ul>
<li>Git用来保存项目的元数据和对象数据库的地方</li>
</ul>
</li>
<li>工作目录<ul>
<li>对项目某个版本独立提取出来的内容</li>
</ul>
</li>
<li>暂存区域<ul>
<li>一个文件，保存了下次讲提交的文件列表信息，一般在仓库目录中，有时称索引</li>
</ul>
</li>
</ol>
<h4 id="状态与工作区对应关系"><a href="#状态与工作区对应关系" class="headerlink" title="状态与工作区对应关系"></a>状态与工作区对应关系</h4><ol>
<li>Git工作流<ul>
<li>在工作目录中修改文件</li>
<li>暂存文件，将文件的快照放入暂存区域</li>
<li>提交更新，找到暂存区域的文件，将快照永久性存储到Git仓库目录</li>
</ul>
</li>
<li>状态与工作区对应<ul>
<li>如果Git目录中保存着特定版本文件，就属于已提交状态</li>
<li>如果做了修改并已放入暂存区就属于已暂存状态</li>
<li>如果自上次取出后，做了修改但是没有放到暂存区域，就是已修改状态<br><img src="http://p0.meituan.net/sjstpic/8b7b135f720ea35b7413dc76d975554d90563.jpeg"></li>
</ul>
</li>
</ol>
<h3 id="三棵树"><a href="#三棵树" class="headerlink" title="三棵树"></a>三棵树</h3><ol>
<li>HEAD<ul>
<li>定义: 当前分支引用的指针，总指向该分支上的最近一次提交。这表示HEAD将是下一次提交的父节点<ul>
<li>上一次提交的快照，下一次提交的父节点</li>
<li>显示HEAD命令:s; git ls-tree -r HEAD</li>
</ul>
</li>
</ul>
</li>
<li>Index<ul>
<li>定义: 索引是预期的下一次提交，即Git的’暂存区域’。Git将三次检出的工作目录中的所有文件填充到索引区,之后通过git add 和git rm命令来更新文件版本，接着通过git commit将它们转换为树来作新提交<ul>
<li>预期下一次提交的父节点</li>
<li>显示索引当前样子: git ls-files -s</li>
</ul>
</li>
</ul>
</li>
<li>Working Directory<ul>
<li>定义: HEAD和索引将它们的内容存储在.git文件中，工作目录将它们解包为实际的文件以便编辑。可以把工作目录当成沙盒，在修改提交到暂存区并纪录历史之前，可以随意更改<ul>
<li>沙盒</li>
</ul>
</li>
</ul>
</li>
</ol>
<h2 id="Git常用命令"><a href="#Git常用命令" class="headerlink" title="Git常用命令"></a>Git常用命令</h2><h3 id="获取Git仓库"><a href="#获取Git仓库" class="headerlink" title="获取Git仓库"></a>获取Git仓库</h3><h4 id="现有目录中初始化仓库"><a href="#现有目录中初始化仓库" class="headerlink" title="现有目录中初始化仓库"></a>现有目录中初始化仓库</h4><ol>
<li>git init<ul>
<li>该命令将创建一个名为.git的子目录，这个子目录含有初始化的Git仓库中所有的必须文件</li>
</ul>
</li>
<li>git add </li>
<li>git commit</li>
</ol>
<h4 id="克隆现有仓库"><a href="#克隆现有仓库" class="headerlink" title="克隆现有仓库"></a>克隆现有仓库</h4><ol>
<li>git  clone url  [ localProjectName ]<ul>
<li>Git克隆的是该Git仓库服务器上的几乎所有数据，而不是仅仅复制完成你的工作所需要文件.当执行git clone命令的时候，默认配置下远程Git仓库中的每一个文件的每一个版本都被拉去下来.</li>
</ul>
</li>
</ol>
<h3 id="纪录每次更新到仓库"><a href="#纪录每次更新到仓库" class="headerlink" title="纪录每次更新到仓库"></a>纪录每次更新到仓库</h3><p>Git仓库(clone)—&gt;工作区(修改文件，提交更新)—&gt;Git仓库 </p>
<ol>
<li>工作目录文件状态: 已跟踪和未跟踪<ul>
<li>已跟踪:指那些被纳入版本控制的文件，在上一次快照中有他们的纪录，在工作一段时间后，他们的状态可能处于未修改，已修改或已放入暂存区</li>
<li>未跟踪(Untracked files): 除了已跟踪文件意外的所有其他文件，他们既不存在于上次快照的纪录中，也没有放入暂存区。初次克隆某个仓库的时候，工作目录中的所有文件都属于已跟踪文件，并处于未修改状态</li>
<li>编辑过某些文件之后，由于自上次提交后你对它们做了修改，Git将它们标记为已修改文件，我们逐步将这些已修改过的文件放入暂存区，然后提交所有暂存了的修改，如此反复</li>
</ul>
</li>
<li>检查当前文件状态: git status<ul>
<li>确定当前目录是否未跟踪状态的新文件</li>
<li>确定当前目录是否有已跟踪修改文件</li>
<li>显示当前所在分支</li>
</ul>
</li>
<li>跟踪新文件: git add<ul>
<li>git add命令可以用来跟踪新文件</li>
<li>git add命令可以用来把已跟踪的文件放入暂存区</li>
<li>git add命令还能用于合并时把有冲突的文件标记为已解决状态 </li>
</ul>
</li>
<li>暂存已修改文件: 使用<code>git status</code>命令，会显示’Changes not staged for commit’,这说明’已跟踪文件的内容发生了变化，但还没放到暂存区’<ul>
<li>使用<code>git status</code>命令，会查看到add的文件XXX已被跟踪，并且处于暂存状态.<code>git add</code>命令使用文件或目录的路径作为参数;如果参数是目录的路径，该命令将递归地跟踪该目录下的所有文件</li>
<li>使用<code>git add</code>之后(<code>git add XXX</code>)，使用<code>git status</code>命令，显示’Changes to be committed’,表示文件都已暂存，下次提交时就会一并记录到仓库.</li>
</ul>
</li>
<li>状态概览:git status -s或git status —short（??、A、M、MM）<ul>
<li>‘??’: 新添加的未跟踪文件前面标记</li>
<li>’A’: 新添加到暂存区中的文件前面标记</li>
<li>’M’: 修改过文件前面标记(M有两个可出现位置，靠左边的M表示该文件被修改了但是还没放入暂存区；靠右边的M表示该文件被修改了并且放入暂存区.)</li>
<li>‘MM’: 表示被修改并提交到暂存区后又在工作去中被修改了，因此暂存区和工作去都有该文件被修改的纪录</li>
</ul>
</li>
<li>查看已缓存和未暂存的修改:git diff<ul>
<li>比较工作目录中当前文件和暂存区域快照之间的差异，也就是<em>修改之后还没有暂存起来的变化内容</em></li>
</ul>
</li>
<li>提交更新: git commit</li>
<li>跳过使用暂存区域: git commit -a <ul>
<li><code>git commit -a</code>Git会自动把所有已经跟踪过的文件暂存起来一并提交，从而跳过git add步骤<code>git commit -a &#39;added new file’</code></li>
</ul>
</li>
<li><p>移除文件: git rm</p>
<ul>
<li>要从Git中移除某个文件，就必须要从已跟踪文件清单中移除，然后提交.使用<code>git rm</code>命令，连带从工作目录中删除指定文件</li>
<li>使用rm<code>rm XXX</code>删除文件之后，需要再运行git rm<code>git rm XXX</code>记录此次移除文件的操作。下次提交时，该文件就不会再纳入版本管理</li>
<li>如果相关文件从Git仓库删除，但仍保留在当前工作目录中(即文件保留在磁盘，但是不想让Git继续跟踪)，可以使用cached<code>git rm --cached XX</code></li>
</ul>
</li>
<li><p>移动文件: git mv file_from file_to</p>
<ul>
<li>git不会显示跟踪文件移动操作。mv命令用于在git中对文件改名。</li>
<li><code>git mv file_from file_to</code>  ;git mv命名只会对已跟踪文件有效</li>
<li><code>git mv README.md README</code>指令等于依次运行了三条指令:<code>mv README.md README</code> 、<code>git rm README.MD</code>、 <code>git add README</code></li>
</ul>
</li>
<li>查看提交历史: git log<ul>
<li>-p: 按补丁格式显示每个更新之间的差异<code>git log -p</code></li>
<li>-2: 显示最近两次提交<code>git log -2 -p</code></li>
<li>–name-status:显示新增、修改、删除的文件清单</li>
</ul>
</li>
</ol>
<h3 id="撤销操作"><a href="#撤销操作" class="headerlink" title="撤销操作"></a>撤销操作</h3><ol>
<li>取消暂存的文件: git reset HEAD <file> <ul>
<li>使用该命令，对文件做的任何修改都会消失(因为可以看看做是拷贝另一个文件来覆盖它)</li>
</ul>
</file></li>
<li>撤销对文件的修改: git checkout – <file><ul>
<li>Git中任何已提交的东西几乎总是可以恢复的(甚至那些被删除的分支中的提交或是用—amend选项覆盖的提交也可以恢复)，然而任何未提交的东西丢失后很可能再也找不到</li>
</ul>
</file></li>
<li>重新提交: git commit —amend<ul>
<li>–amend命令会将暂存区中的文件提交，并且编辑保存后会覆盖原来的提交信息，最终只会有一条提交结果</li>
</ul>
</li>
</ol>
<h3 id="远程仓库的使用"><a href="#远程仓库的使用" class="headerlink" title="远程仓库的使用"></a>远程仓库的使用</h3><ol>
<li>查看远程仓库: git remote [-v]/git remote show [remote-name]<ul>
<li>列出指定的每一个远程服务器的简写,如果克隆了自己的仓库，则至少可以看到origin(Git给克隆仓库的服务器默认名字) .</li>
<li>-v: 显示需要读写远程仓库使用的Git保存的简写与其对应的URL<code>git remote -v</code></li>
<li>git remote show [remote-name]: 查看某一个远程仓库的更多信息,列出远程仓库URL与跟踪分支信息  </li>
</ul>
</li>
<li><p>添加远程仓库: git remote add <shortname> <url></url></shortname></p>
<ul>
<li>使用<code>git remote add &lt;shortname&gt; &lt;url&gt;</code>添加一个新的远程Git仓库(url)，同时指定可以引用的简写(shortname).在命令中可以使用shortname来代替整个URL</li>
</ul>
</li>
<li><p>从远程仓库中抓取与拉取: git fetch [remote-name],git clone,git pull</p>
<ul>
<li>访问远程仓库，从中拉取所有本地没有的数据。执行完成之后本地会拥有远程仓库所有分支的引用，可以随时合并或查看. git fetch命令会将数据拉取到本地仓库，但是并不会自动合并或修改当前的工作。</li>
<li>克隆一个仓库，命令会自动将其添加为远程仓库并默认以<code>origin</code>为简写,git clone命令会自动设置本地master分支跟踪克隆的远程仓库的master分支(或不管是什么名字的默认分支) </li>
<li>自动抓取然后合并远程分支到当前分支。git pull会从最初克隆的服务器上抓取数据并自动常识合并到当前所在的分支</li>
</ul>
</li>
<li>推送到远程仓库: git push [remote-name] [branch-name]<ul>
<li>将本地branch-name分支推送到remote-name服务器;只有对克隆服务器有写入权限，并且之前没有人推送过时，这条命令才能生效。如果有人推送过，则必须先拉取合并后再进行推送</li>
</ul>
</li>
<li>远程仓库的移除与重命名<ul>
<li>git remote rename [oldName] [newName]</li>
<li>git remote rm [remoteName]</li>
<li>重命名引用的远程仓库的简写名,值得注意的是，这样也会修改远程分支名称</li>
</ul>
</li>
</ol>
<h3 id="打标签"><a href="#打标签" class="headerlink" title="打标签"></a>打标签</h3><ol>
<li>列出标签: git tag [-l ‘vX.Y.Z*’]<ul>
<li>git tag: 以字母顺序列出标签,顺序并不重要</li>
<li>git tag -l ‘vX.Y.Z*’: 以特定的模式查找标签, 列出以vX.Y.Z开始的所有标签</li>
</ul>
</li>
<li>附注标签: git tag -a, git show [tag-name]<ul>
<li>git tag -a创建一个附注标签,-m: 指定一条鉴会存储在标签中的信息</li>
<li>git show [tag-name]: 查看标签信息与对应的提交信息:输出打标签者的信息、打标签的日期时间、附注信息、具体提交信息</li>
</ul>
</li>
<li>后期打标签: git tag -a [tag-name] [校验和]</li>
<li>共享标签: git push origin [tag-name], git push origin —tags</li>
<li>删除标签<ul>
<li>git tag -d [tag-name]; git push origin :refs/tags/vX.Y.Z</li>
<li>git push origin –delete tag <tagname></tagname></li>
<li>这样只能删除本地tag和远程tag，其它人本地的tag依旧存在，需要手动删除，否则很容易被推到远程(如果使用工具之行git push操作，则本地tag也会被一起推送上去)</li>
</ul>
</li>
</ol>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ol>
<li><a href="https://git-scm.com/book/en/v2" target="_blank" rel="external">pro Git</a></li>
<li><a href="https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA%8E%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6" target="_blank" rel="external">Git版本控制</a></li>
</ol>
</span>
      
    </div>

    <footer class="post-footer">

      
        <div class="post-nav">
          <div class="post-nav-prev post-nav-item">
            
              <a href="/2017/02/04/wangweitao/RxJava_Migration/" rel="prev">The Next Step for Reactive Android Programming（译文）</a>
            
          </div>

          <div class="post-nav-next post-nav-item">
            
              <a href="/2017/01/13/wangweitao/imageView_Fit/" rel="next">ImageView的scaleType属性效果</a>
            
          </div>
        </div>
      

      
      
    </footer>
  </article>



    <div class="post-spread">
      
        <!-- JiaThis Button BEGIN -->
<div class="jiathis_style">
  <a class="jiathis_button_tsina"></a>
  <a class="jiathis_button_tqq"></a>
  <a class="jiathis_button_weixin"></a>
  <a class="jiathis_button_cqq"></a>
  <a class="jiathis_button_douban"></a>
  <a class="jiathis_button_renren"></a>
  <a class="jiathis_button_qzone"></a>
  <a class="jiathis_button_kaixin001"></a>
  <a class="jiathis_button_copy"></a>
  <a href="http://www.jiathis.com/share" class="jiathis jiathis_txt jiathis_separator jtico jtico_jiathis" target="_blank"></a>
  <a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" >
  var jiathis_config={
    hideMore:false
  }
</script>
<script type="text/javascript" src="http://v3.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END -->

      
    </div>
  </div>

 </div>

        

        
          <div class="comments" id="comments">
            <div id="SOHUCS" sid="" ></div>
          </div>
        
      </div>

      
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    <div class="sidebar-inner">

      
        <ul class="sidebar-nav motion-element">
          <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap" >
            文章目录
          </li>
          <li class="sidebar-nav-overview" data-target="site-overview">
            站点概览
          </li>
        </ul>
      

      <section class="site-overview">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
          <a href="https://github.com/xgfe" target="_blank"><img class="site-author-image" src="http://p0.meituan.net/xgfe/082a9624ba5ae8602150a2d43968463e49348.png" alt="xgfe" itemprop="image"/></a>
          <p class="site-author-name" itemprop="name">xgfe</p>
        </div>
        <p class="site-description motion-element" itemprop="description">xgfe's blog. 鲜果前端的技术博客，鲜果前端研发部官方博客。前端基础技术研究：html, html5, javascript, css, css3；前端框架研究：angularJs, react, react native.</p>
        <nav class="site-state motion-element">
          <div class="site-state-item site-state-posts">
            <a href="/archives">
              <span class="site-state-item-count">89</span>
              <span class="site-state-item-name">日志</span>
            </a>
          </div>

          <div class="site-state-item site-state-categories">
            
              <span class="site-state-item-count">37</span>
              <span class="site-state-item-name">作者</span>
              
          </div>

          <div class="site-state-item site-state-tags">
            <a href="/tags">
              <span class="site-state-item-count">131</span>
              <span class="site-state-item-name">标签</span>
              </a>
          </div>

        </nav>

        
          <div class="feed-link motion-element">
            <a href="/atom.xml" target="_blank" rel="alternate">
              <i class="menu-item-icon icon-next-feed"></i>
              RSS
            </a>
          </div>
        

        <div class="links-of-author motion-element">
          
            
              <span class="links-of-author-item">
                <a href="https://github.com/xgfe" target="_blank">GitHub</a>
              </span>
            
          
        </div>

        
        

        <div class="links-of-author motion-element">
          
        </div>

      </section>

      
        <section class="post-toc-wrap sidebar-panel-active">
          <div class="post-toc-indicator-top post-toc-indicator"></div>
          <div class="post-toc">
            
            
              <div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#初识Git"><span class="nav-number">1.</span> <span class="nav-text">初识Git</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#背景"><span class="nav-number">1.1.</span> <span class="nav-text">背景</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#版本控制"><span class="nav-number">1.2.</span> <span class="nav-text">版本控制</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#认识Git"><span class="nav-number">1.3.</span> <span class="nav-text">认识Git</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#安装Git"><span class="nav-number">1.3.1.</span> <span class="nav-text">安装Git</span></a></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#Git基础简介"><span class="nav-number">2.</span> <span class="nav-text">Git基础简介</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#三种状态"><span class="nav-number">2.1.</span> <span class="nav-text">三种状态</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#三个工作区"><span class="nav-number">2.2.</span> <span class="nav-text">三个工作区</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#状态与工作区对应关系"><span class="nav-number">2.2.1.</span> <span class="nav-text">状态与工作区对应关系</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#三棵树"><span class="nav-number">2.3.</span> <span class="nav-text">三棵树</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#Git常用命令"><span class="nav-number">3.</span> <span class="nav-text">Git常用命令</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#获取Git仓库"><span class="nav-number">3.1.</span> <span class="nav-text">获取Git仓库</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#现有目录中初始化仓库"><span class="nav-number">3.1.1.</span> <span class="nav-text">现有目录中初始化仓库</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#克隆现有仓库"><span class="nav-number">3.1.2.</span> <span class="nav-text">克隆现有仓库</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#纪录每次更新到仓库"><span class="nav-number">3.2.</span> <span class="nav-text">纪录每次更新到仓库</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#撤销操作"><span class="nav-number">3.3.</span> <span class="nav-text">撤销操作</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#远程仓库的使用"><span class="nav-number">3.4.</span> <span class="nav-text">远程仓库的使用</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#打标签"><span class="nav-number">3.5.</span> <span class="nav-text">打标签</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#参考资料"><span class="nav-number">4.</span> <span class="nav-text">参考资料</span></a></li></ol></div>
            
          </div>
          <div class="post-toc-indicator-bottom post-toc-indicator"></div>
        </section>
      

    </div>
  </aside>


    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner"> <div class="copyright" >
  
  &copy; &nbsp; 
  <span itemprop="copyrightYear">2018</span>
  <span class="with-love">
    <i class="icon-next-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">xgfe</span>
</div>

<div class="powered-by">
  由 <a class="theme-link" target="_blank" href="http://hexo.io">Hexo</a> 强力驱动
</div>

<div class="theme-info">
  主题 -
  <a class="theme-link" target="_blank" href="https://github.com/iissnan/hexo-theme-next">
    NexT.Mist
  </a>
</div>


 </div>
    </footer>

    <div class="back-to-top"></div>
  </div>

  <script type="text/javascript" src="/vendors/jquery/index.js?v=2.1.3"></script>

  
  
  
    <script type="text/javascript"> 
(function(){ 
var appid = 'cysWiXvkm'; 
var conf = 'prod_fc970dbe85103c7a79b2c4f3dc7fb190'; 
var width = window.innerWidth || document.documentElement.clientWidth; 
if (width < 960) { 
window.document.write('<script id="changyan_mobile_js" charset="utf-8" type="text/javascript" src="http://changyan.sohu.com/upload/mobile/wap-js/changyan_mobile.js?client_id=' + appid + '&conf=' + conf + '"><\/script>'); } else { var loadJs=function(d,a){var c=document.getElementsByTagName("head")[0]||document.head||document.documentElement;var b=document.createElement("script");b.setAttribute("type","text/javascript");b.setAttribute("charset","UTF-8");b.setAttribute("src",d);if(typeof a==="function"){if(window.attachEvent){b.onreadystatechange=function(){var e=b.readyState;if(e==="loaded"||e==="complete"){b.onreadystatechange=null;a()}}}else{b.onload=a}}c.appendChild(b)};loadJs("http://changyan.sohu.com/upload/changyan.js",function(){window.changyan.api.config({appid:appid,conf:conf})}); } })(); </script>
    

  


  
  
  <script type="text/javascript" src="/vendors/fancybox/source/jquery.fancybox.pack.js"></script>
  <script type="text/javascript" src="/js/fancy-box.js?v=0.4.5.1"></script>


  <script type="text/javascript" src="/js/helpers.js?v=0.4.5.1"></script>
  

  <script type="text/javascript" src="/vendors/velocity/velocity.min.js"></script>
  <script type="text/javascript" src="/vendors/velocity/velocity.ui.min.js"></script>

  <script type="text/javascript" src="/js/motion_global.js?v=0.4.5.1" id="motion.global"></script>




  <script type="text/javascript" src="/js/nav-toggle.js?v=0.4.5.1"></script>
  <script type="text/javascript" src="/vendors/fastclick/lib/fastclick.min.js?v=1.0.6"></script>

  
  
<script type="text/javascript" src="/js/bootstrap.scrollspy.js?v=0.4.5.1" id="bootstrap.scrollspy.custom"></script>


<script type="text/javascript" id="sidebar.toc.highlight">
  $(document).ready(function () {
    var tocSelector = '.post-toc';
    var $tocSelector = $(tocSelector);
    var activeCurrentSelector = '.active-current';

    $tocSelector
      .on('activate.bs.scrollspy', function () {
        var $currentActiveElement = $(tocSelector + ' .active').last();

        removeCurrentActiveClass();
        $currentActiveElement.addClass('active-current');

        $tocSelector[0].scrollTop = $currentActiveElement.position().top;
      })
      .on('clear.bs.scrollspy', function () {
        removeCurrentActiveClass();
      });

    function removeCurrentActiveClass () {
      $(tocSelector + ' ' + activeCurrentSelector)
        .removeClass(activeCurrentSelector.substring(1));
    }

    function processTOC () {
      getTOCMaxHeight();
      toggleTOCOverflowIndicators();
    }

    function getTOCMaxHeight () {
      var height = $('.sidebar').height() -
                   $tocSelector.position().top -
                   $('.post-toc-indicator-bottom').height();

      $tocSelector.css('height', height);

      return height;
    }

    function toggleTOCOverflowIndicators () {
      tocOverflowIndicator(
        '.post-toc-indicator-top',
        $tocSelector.scrollTop() > 0 ? 'show' : 'hide'
      );

      tocOverflowIndicator(
        '.post-toc-indicator-bottom',
        $tocSelector.scrollTop() >= $tocSelector.find('ol').height() - $tocSelector.height() ? 'hide' : 'show'
      )
    }

    $(document).on('sidebar.motion.complete', function () {
      processTOC();
    });

    $('body').scrollspy({ target: tocSelector });
    $(window).on('resize', function () {
      if ( $('.sidebar').hasClass('sidebar-active') ) {
        processTOC();
      }
    });

    onScroll($tocSelector);

    function onScroll (element) {
      element.on('mousewheel DOMMouseScroll', function (event) {
          var oe = event.originalEvent;
          var delta = oe.wheelDelta || -oe.detail;

          this.scrollTop += ( delta < 0 ? 1 : -1 ) * 30;
          event.preventDefault();

          toggleTOCOverflowIndicators();
      });
    }

    function tocOverflowIndicator (indicator, action) {
      var $indicator = $(indicator);
      var opacity = action === 'show' ? 0.4 : 0;
      $indicator.velocity ?
        $indicator.velocity('stop').velocity({
          opacity: opacity
        }, { duration: 100 }) :
        $indicator.stop().animate({
          opacity: opacity
        }, 100);
    }

  });
</script>

<script type="text/javascript" id="sidebar.nav">
  $(document).ready(function () {
    var html = $('html');
    var TAB_ANIMATE_DURATION = 200;
    var hasVelocity = $.isFunction(html.velocity);

    $('.sidebar-nav li').on('click', function () {
      var item = $(this);
      var activeTabClassName = 'sidebar-nav-active';
      var activePanelClassName = 'sidebar-panel-active';
      if (item.hasClass(activeTabClassName)) {
        return;
      }

      var currentTarget = $('.' + activePanelClassName);
      var target = $('.' + item.data('target'));

      hasVelocity ?
        currentTarget.velocity('transition.slideUpOut', TAB_ANIMATE_DURATION, function () {
          target
            .velocity('stop')
            .velocity('transition.slideDownIn', TAB_ANIMATE_DURATION)
            .addClass(activePanelClassName);
        }) :
        currentTarget.animate({ opacity: 0 }, TAB_ANIMATE_DURATION, function () {
          currentTarget.hide();
          target
            .stop()
            .css({'opacity': 0, 'display': 'block'})
            .animate({ opacity: 1 }, TAB_ANIMATE_DURATION, function () {
              currentTarget.removeClass(activePanelClassName);
              target.addClass(activePanelClassName);
            });
        });

      item.siblings().removeClass(activeTabClassName);
      item.addClass(activeTabClassName);
    });

    $('.post-toc a').on('click', function (e) {
      e.preventDefault();
      var targetSelector = escapeSelector(this.getAttribute('href'));
      var offset = $(targetSelector).offset().top;
      hasVelocity ?
        html.velocity('stop').velocity('scroll', {
          offset: offset  + 'px',
          mobileHA: false
        }) :
        $('html, body').stop().animate({
          scrollTop: offset
        }, 500);
    });

    // Expand sidebar on post detail page by default, when post has a toc.
    var $tocContent = $('.post-toc-content');
    if (isDesktop() && CONFIG.sidebar === 'post') {
      if ($tocContent.length > 0 && $tocContent.html().trim().length > 0) {
        displaySidebar();
      }
    }
  });
</script>



  <script type="text/javascript">
    $(document).ready(function () {
      if (CONFIG.sidebar === 'always') {
        displaySidebar();
      }
      if (isMobile()) {
        FastClick.attach(document.body);
      }
    });
  </script>

  

  
  

  
  <script type="text/javascript" src="/js/lazyload.js"></script>
  <script type="text/javascript">
    $(function () {
      $("#posts").find('img').lazyload({
        placeholder: "/images/loading.gif",
        effect: "fadeIn"
      });
    });
  </script>

  <!-- google search, added by felix -->
  <script>
      $('#gg-form').on('submit', function(e) {
        var keyword = $.trim($(this).find('#gg-search-input').val());
        if (keyword) {
          location.href = 'https://www.google.com.hk/?gfe_rd=cr&ei=hXw8VpjtHuLC8AeSuIjQAg&gws_rd=ssl#safe=strict&q='+encodeURIComponent(keyword)+'+site:xgfe.github.io';
        }
        return false;
      });
  </script>
  <!-- baidu 站长自动推送 -->
  <script>
  (function(){
      var bp = document.createElement('script');
      bp.src = '//push.zhanzhang.baidu.com/push.js';
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(bp, s);
  })();
  </script>
</body>
</html>
